Desnutrición en poblaciones de la Amazonía, Andes y Afroperuana
Análisis de datos del Ministerio de Salud (MINSA)
Author
Subdirección de Medicina Tradicional, Interculturalidad e Investigación Social (SUMEC-CENSI)
Published
December 18, 2025
La desnutrición se presenta cuando son insuficientes las calorías que se consumen o por la absorción deficiente de la cantidad de nutrientes esenciales (vitaminas y minerales) que permiten mantener la salud. Según la Organización Mundial de la salud, la desnutrición es una de las formas de malnutrición.
La desnutrición, especialmente en los niños, los hace más vulnerables a más enfermedades y el riesgo de quedar con daños permanentes y hasta morir.
Es necesario precisar que la diminución en el registro de los casos de esta problemática de salud se explica por la reducción en las atenciones en los servicios de salud a causa de la pandemia por la Covid-19.
Según el CIE 10, sistema internacional que clasifica las morbilidades para un mejor análisis, la desnutrición comprende las siguientes categorías:
Kwashiorkor
Marasmo nutricional
Desnutrición proteicocalórica severa, no especificada
Desnutrición proteicocalórica de grado moderado y leve
Retardo del desarrollo debido a desnutrición proteicocalórica
Desnutrición proteicocalórica, no especificada
Desnutrición en poblaciones andinas, amazónicas, afroperuanas y mestiza 2019-2021
library(tidyverse)library(plotly)library(DT)library(rio)# --- FUNCIÓN AUXILIAR PARA TABLAS DE DESCARGA ---# Esta función crea estandariza el botón de Excel para todos los gráficosmake_download_table <-function(data_input, filename_label ="datos") {datatable( data_input,extensions ='Buttons',rownames =FALSE,options =list(dom ='Bfrtip',buttons =list(list(extend ='excel', filename = filename_label, title = filename_label),list(extend ='csv', filename = filename_label) ),pageLength =5, # Pocas filas para no ocupar mucho espacioscrollX =TRUE,language =list(url ='//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json') ) )}data_nutricion<-read_csv("data-nutricional.csv")# 2. PROCESAMIENTOplot_data <- data_nutricion %>%pivot_longer(cols =`2019`:`2021`, names_to ="Año_Texto", values_to ="Casos" ) %>%mutate(# Convertimos a número para que el eje X sea continuo y lineal Año =as.numeric(Año_Texto),# Creamos un texto bonito para cuando pases el mouseTooltip_Text =paste0("<b>", `Grupo étnico`, "</b><br>","Año: ", Año, "<br>","Casos: ", format(Casos, big.mark =",")) )# 3. GRÁFICO DE TENDENCIAS FACETADO (SEPARADO)g_tendencias_sep <-ggplot(plot_data, aes(x = Año, y = Casos, color =`Grupo étnico`)) +# Líneas y Puntosgeom_line(linewidth =1.2) +geom_point(aes(text = Tooltip_Text), size =3) +# --- AQUÍ ESTÁ LA CLAVE: Separar en paneles ---# ncol = 2 organiza los gráficos en 2 columnasfacet_wrap(~`Grupo étnico`, ncol =2, scales="free_y") +# Paleta de coloresscale_color_brewer(palette ="Set1") +# Ajustes de Ejesscale_x_continuous(breaks =c(2019, 2020, 2021)) +scale_y_continuous(labels = scales::comma, limits =c(0, NA)) +# El 0 asegura la comparabilidadlabs(title ="Evolución de desnutrición por grupo poblacional",subtitle ="Tendencias separadas (2019-2021)",x ="",y ="Número de Casos (Escala variable)" ) +theme_minimal() +theme(plot.title =element_text(face ="bold", size =14),strip.text =element_text(face ="bold", size =12), # Títulos de cada panel más grandesstrip.background =element_rect(fill ="#f0f0f0", color =NA), # Fondo gris en títuloslegend.position ="none", # Ocultamos la leyenda (ya está en el título de cada panel)panel.grid.minor =element_blank() )# 4. INTERACTIVIDADggplotly(g_tendencias_sep, tooltip ="text") %>%layout(margin =list(t =60) )
En las poblaciones amazónicas, se observa una disminución progresiva en los registros de casos de desnutrición, desde el 2019 al 2021, a diferencia de los otros grupos étnicos. El 2019, registró 21 483; el 2020, 10 126 y el 2021, 7 473. Del 2019 al 2020, disminuyó 53% y del 2020 al 2021, 26%. En las poblaciones andinas, 2019, registró 15 223; el 2020, 6 756 y el 2021, 7 066. Del 2019 al 2020, disminuyó 56% y del 2020 al 2021, aumentó en 5%. En la población afroperuana, aumentaron levemente los registros de casos, el 2019, registró 71 casos de desnutrición; el 2020, 74 y el 2021, 117. Del 2019 al 2020, aumentó 4% y del 2020 al 2021, 58%. uno de los factores puede ser por la disminución de registros por la restricción de los servicios durante la pandemia por la Covid-19.
En “categorías” se desagrega en Kwashiorkor; Marasmo nutricional; Desnutrición proteicocalórica severa, no especificada; Desnutrición proteicocalórica de grado moderado y leve; Retardo del desarrollo debido a desnutrición proteicocalórica; Desnutrición proteicocalórica, no especificada. En la catagoría total, se suma todos los casos.
#| echo: false#| warning: false#| message: falselibrary(tidyverse)library(reactable)library(htmltools)library(sparkline)library(scales)# 2. PROCESAMIENTO# Añadimos una columna con la lista de valores para generar el 'Sparkline' (minigráfico)data_tabla <- data_nutricion_etnias %>%rowwise() %>%mutate(Tendencia =list(c(`2019`, `2020`, `2021`))) %>%ungroup()# 3. CREACIÓN DE LA TABLA REACTABLEreactable( data_tabla,pagination =TRUE,searchable =TRUE,showPageSizeOptions =TRUE,striped =TRUE,highlight =TRUE,defaultPageSize =10,# Estilo generaltheme =reactableTheme(headerStyle =list(backgroundColor ="#aeeec9", # Color verde del encabezado originalfontWeight ="bold",color ="#2e2e2e" ),borderColor ="#dfe2e5" ),columns =list(# Columna Etnias: Negrita y fondo suaveEtnias =colDef(style =list(fontWeight ="bold", backgroundColor ="#f9fbf0"),minWidth =120 ),# Columna Categorías: Ancho suficiente para texto largo Categorías =colDef(minWidth =250,style =list(fontSize ="0.9em", color ="#444") ),# Columna TENDENCIA (Sparkline)# Esta es la columna mágica que replica la línea azul del DatawrapperTendencia =colDef(name ="2019-2021",cell =function(value, index) {sparkline(data_tabla$Tendencia[[index]], type ="line", width =100, height =25,lineColor ="#18a1cd", # Azul DatawrapperfillColor ="#d6eff7", # Relleno suavespotColor =FALSE, minSpotColor =FALSE, maxSpotColor =FALSE) },minWidth =120 ),# Columnas de Años (Formateo simple)`2019`=colDef(maxWidth =70, align ="center"),`2020`=colDef(maxWidth =70, align ="center"),`2021`=colDef(maxWidth =70, align ="center",style =list(fontWeight ="bold", backgroundColor ="#f0f0f0") # Destacamos el último año ) ),# Títulos y FuenteselementId ="tabla-desnutricion") %>%# Título externo a la tabla (HTML) htmlwidgets::prependContent(h3("Desnutrición en etnias del Perú 2019-2021", style ="font-family: Arial; font-weight: bold; margin-bottom: 5px;"),p('En "categorías" se desagrega el tipo de desnutrición. En la categoría total, se suma todos los casos.',style ="font-family: Arial; color: #666; font-size: 0.9em; margin-bottom: 15px;") )
Desnutrición en etnias del Perú 2019-2021
En "categorías" se desagrega el tipo de desnutrición. En la categoría total, se suma todos los casos.
Durante el periodo analizado, 2019 al 2021, las etnias con más registros de casos son Quechua, Awajún, Ashaninka, Aimara, Shipibo-Konibo. Casi en todos aparece primero la categoría retardo del desarrollo debido a desnutrición proteicocalórica, sin embargo, el 2020, en los Aimaras aparece primero la categoría, Desnutrición proteicocalórica, no especificada. El 2021, Quechuas y Aimaras tienen más casos registrados en la categoría Desnutrición proteicocalórica, no especificada. En las etnias amazónicas aparecen más casos de la categoría Retardo del desarrollo debido a desnutrición proteicocalórica.
La categoría que prima más en los registros de casos es retardo del desarrollo debido a desnutrición proteicocalórica, el 2019 con 17 087 casos; el 2020, 8 303 y el 2021, 5 863 casos. En segundo lugar, es la categoría Desnutrición proteicocalórica de grado moderado y leve, el 2019 con 3 175 casos; el 2020, 1 421 y el 2021, 1 219 casos.
Code
#| echo: false#| warning: false#| message: false#| fig-height: 10 #| fig-width: 9library(tidyverse)library(plotly)library(scales)# 1. DATOS data_desnutricion_sexo <-tribble(~Categoria, ~Año, ~M, ~F,"Kwashiorkor", 2019, 7, 17,"Kwashiorkor", 2020, 4, 1,"Kwashiorkor", 2021, 1, 2,"Marasmo nutricional", 2019, 14, 27,"Marasmo nutricional", 2020, 6, 8,"Marasmo nutricional", 2021, 1, 5,"Desnutrición proteicocalórica severa, no especificada", 2019, 221, 283,"Desnutrición proteicocalórica severa, no especificada", 2020, 121, 107,"Desnutrición proteicocalórica severa, no especificada", 2021, 79, 84,"Desnutrición proteicocalórica de grado moderado y leve", 2019, 1325, 1850,"Desnutrición proteicocalórica de grado moderado y leve", 2020, 636, 785,"Desnutrición proteicocalórica de grado moderado y leve", 2021, 590, 629,"Retardo del desarrollo debido a desnutrición proteicocalórica", 2019, 8192, 8895,"Retardo del desarrollo debido a desnutrición proteicocalórica", 2020, 4009, 4294,"Retardo del desarrollo debido a desnutrición proteicocalórica", 2021, 2774, 3089,"Desnutrición proteicocalórica, no especificada", 2019, 272, 380,"Desnutrición proteicocalórica, no especificada", 2020, 58, 97,"Desnutrición proteicocalórica, no especificada", 2021, 86, 133,"Total", 2019, 10031, 11452,"Total", 2020, 4834, 5292,"Total", 2021, 3531, 3942)# 2. PROCESAMIENTO# Calculamos el valor máximo global para centrar el ejemax_valor <-max(c(data_desnutricion_sexo$M, data_desnutricion_sexo$F), na.rm =TRUE)# Le damos un 10% de margen extra para que no quede pegadolimite_eje <- max_valor *1.1plot_data <- data_desnutricion_sexo %>%pivot_longer(cols =c("M", "F"), names_to ="Sexo", values_to ="Casos") %>%mutate(Casos_Plot =ifelse(Sexo =="M", -Casos, Casos), Año =factor(Año, levels =c(2021, 2020, 2019)),Categoria =factor(Categoria, levels =unique(data_desnutricion_sexo$Categoria)),Tooltip_Text =paste0("<b>", Categoria, "</b><br>","Año: ", Año, "<br>","Sexo: ", ifelse(Sexo =="M", "Masculino", "Femenino"), "<br>","Casos: ", format(Casos, big.mark =" ") ) )color_male <-"#61dcb6"color_female <-"#ffff8d"# 3. GRÁFICO BASEg_piramide_centrada <-ggplot(plot_data, aes(x = Año, y = Casos_Plot, fill = Sexo)) +geom_col(aes(text = Tooltip_Text), width =0.85) +coord_flip() +facet_wrap(~Categoria, ncol =1, scales ="free_x") +# Mantenemos free_xscale_fill_manual(values =c("M"= color_male, "F"= color_female), labels =c("M"="Hombres", "F"="Mujeres")) +# --- LA MEJORA DE SIMETRÍA ---# Aunque usamos 'free_x' arriba para que cada faceta tenga su propia escala,# esto a veces descentra el 0 si la asimetría es grande.# Para forzar la simetría visual perfecta, usamos 'labels' para corregir los números# y expandimos el límite simétricamente.scale_y_continuous(labels =function(x) number(abs(x), big.mark =" "),# n.breaks = 5 fuerza a que haya marcas legibles (ej: 4000, 2000, 0, 2000, 4000)n.breaks =5 ) +labs(title ="Desnutrición por sexo en poblaciones amazónicas",x ="",y ="" ) +theme_minimal() +theme(plot.title =element_text(face ="bold", size =14),strip.text =element_text(face ="bold", size =10, hjust =0),strip.background =element_rect(fill ="#f9f9f9", color =NA),panel.grid.major.y =element_blank(),legend.position ="bottom" )# 4. CONVERSIÓN A INTERACTIVO CON AJUSTE FINOp <-ggplotly(g_piramide_centrada, tooltip ="text", height =1000) %>%layout(legend =list(orientation ="h", xanchor ="center", x =0.5, y =-0.05),margin =list(t =80, l =50, b =50) )# --- TRUCO AVANZADO PARA CENTRAR EL CERO EN CADA FACETA ---# Plotly con 'scales="free"' a veces mueve el cero.# Este bucle recorre cada uno de los sub-gráficos (ejes X) y los fuerza a ser simétricos.# Si el rango original era [-200, 500], lo fuerza a ser [-500, 500].for(i inseq_along(p$x$layout)) {if(grepl("xaxis", names(p$x$layout)[i])) {# Obtenemos el rango actual que calculó ggplot automáticamente current_range <- p$x$layout[[i]]$range# Encontramos cuál es el valor absoluto más grande max_abs <-max(abs(current_range))# Forzamos el rango a ser simétrico: de -max a +max p$x$layout[[i]]$range <-c(-max_abs, max_abs) }}p
Afecta más a los niños de 1 a 5 años, el 2019 represento el 69% del total de casos, el 2020, el 73% y el 2021, el 59%. Es seguido por los niños de 1 a 11 meses.
Desnutrición por curso de vida en poblaciones amazónicas 2019-2021
En “categorías” se desagrega en Kwashiorkor; Marasmo nutricional; Desnutrición proteicocalórica severa, no especificada; Desnutrición proteicocalórica de grado moderado y leve; Retardo del desarrollo debido a desnutrición proteicocalórica; Desnutrición proteicocalórica, no especificada. En “total”, se suma todos los casos.
#| echo: false#| warning: false#| message: falselibrary(tidyverse)library(reactable)library(htmltools)library(sparkline)# 2. PROCESAMIENTO# Añadimos una columna con la lista de valores para generar el 'Sparkline' (minigráfico)data_tabla <- data_nutricion_amazonica %>%rowwise() %>%mutate(Tendencia =list(c(`2019`, `2020`, `2021`))) %>%ungroup()# 3. CREACIÓN DE LA TABLA REACTABLEreactable( data_tabla,pagination =TRUE,searchable =TRUE,showPageSizeOptions =TRUE,striped =TRUE,highlight =TRUE,defaultPageSize =10,# Estilo generaltheme =reactableTheme(headerStyle =list(backgroundColor ="#ffe082", # Color verde del encabezado originalfontWeight ="bold",color ="#333" ),borderColor ="#ddd" ),columns =list(# Columna Etnias: Negrita y fondo suaveDepartamentos =colDef(style =list(fontWeight ="bold", backgroundColor ="#f3e2a9"),minWidth =130 ),# Columna Categorías: Ancho suficiente para texto largo Categorías =colDef(minWidth =250,style =list(fontSize ="0.9em", color ="#444") ),# Columna TENDENCIA (Sparkline)# Esta es la columna mágica que replica la línea azul del DatawrapperTendencia =colDef(name ="2019-2021",cell =function(value, index) {sparkline(data_tabla$Tendencia[[index]], type ="bar", # Tipo BARRA (como en tu imagen)barColor ="#ffea00", # Color de barra amarillo intensochartRangeMin =0,width =80, height =20) },style =list(backgroundColor ="#fffde7"), # Fondo crema para continuidadalign ="center",minWidth =150 ),# Columnas de Años (Formateo simple)`2019`=colDef(maxWidth =70, align ="center"),`2020`=colDef(maxWidth =70, align ="center"),`2021`=colDef(maxWidth =70, align ="center",style =list(fontWeight ="bold", backgroundColor ="#f0f0f0") # Destacamos el último año ) ),# Títulos y FuenteselementId ="tabla-desnutricion") %>%# Título externo a la tabla (HTML) htmlwidgets::prependContent(h3("Desnutrición en poblaciones amazónicas del Perú 2019-2021", style ="font-family: Arial; font-weight: bold; margin-bottom: 5px;") )
Desnutrición en poblaciones amazónicas del Perú 2019-2021
El 2019 y 2020 aparecen en este orden las regiones con mayores registros: Amazonas, Loreto, Junín y Ucayali, sumando más del 90% de los casos totales en las poblaciones amazónicas. El 2021, continua primero Amazonas, seguido de Junín, Ucayali y Loreto, sumando el 87%.
Desde el 2019 al 2021, la categoría más registrada en la población andina fue retardo del desarrollo debido a desnutrición proteicocalórica con 9 733 casos: durante el 2020, 4 547 y en el 2021, 4 390 casos. En segundo lugar, la categoría desnutrición proteicocalórica, no especificada. En el 2019 con 3 968 casos; en el 2020, 1 467; y en el 2021, 1 685 casos.
La diferencia del número de casos entre hombres y mujeres, es mínima. Las mujeres, el 2019 registraron el 53%, el 2020, 50% y el 2021, 52% .
La desnutrición afecta principalmente a tres grupos de edades. Primero a los niños de 1 a 5 años, alcanzó al 31% del total de casos del 2019, el 43% del total de casos del 2020 y 36% del 2021. Es seguido por los adultos mayores con 30%, el 2019; 24%, el 2020 y 26%, el 2021. Continúan los adolescentes, 21%, el 2019; 13%, el 2020 y 17%, el 2021.
Desnutrición por etapa de vida en poblaciones andinas 2019-2021
En “categorías” se desagrega en Kwashiorkor; Marasmo nutricional; Desnutrición proteicocalórica severa, no especificada; Desnutrición proteicocalórica de grado moderado y leve; Retardo del desarrollo debido a desnutrición proteicocalórica; Desnutrición proteicocalórica, no especificada. En la categoría total, se suma todos los casos.
#| echo: false#| warning: false#| message: falselibrary(tidyverse)library(reactable)library(htmltools)library(sparkline)# 2. PROCESAMIENTO# Añadimos una columna con la lista de valores para generar el 'Sparkline' (minigráfico)data_tabla <- data_nutricion_andinas %>%rowwise() %>%mutate(Tendencia =list(c(`2019`, `2020`, `2021`))) %>%ungroup()# 3. CREACIÓN DE LA TABLA REACTABLEreactable( data_tabla,pagination =TRUE,searchable =TRUE,showPageSizeOptions =TRUE,striped =TRUE,highlight =TRUE,defaultPageSize =10,# Estilo generaltheme =reactableTheme(headerStyle =list(backgroundColor ="#6CD4B2", # Color verde del encabezado originalfontWeight ="bold",color ="#333" ),borderColor ="#ddd" ),columns =list(# Columna Etnias: Negrita y fondo suaveDepartamentos =colDef(style =list(fontWeight ="bold", backgroundColor ="#A3F2D9"),minWidth =130 ),# Columna Categorías: Ancho suficiente para texto largo Categorías =colDef(minWidth =250,style =list(backrunColor="#CCF7E9", fontSize ="0.9em", color ="#333") ),# Columna TENDENCIA (Sparkline)# Esta es la columna mágica que replica la línea azul del DatawrapperTendencia =colDef(name ="2019-2021",cell =function(value, index) {sparkline(data_tabla$Tendencia[[index]], type ="bar", # Tipo BARRA (como en tu imagen)barColor ="#FF9E75", # Color de barra amarillo intensochartRangeMin =0,width =80, height =20) },style =list(backgroundColor ="#CCF7E9"), # Fondo crema para continuidadalign ="center",minWidth =150 ),# Columnas de Años (Formateo simple)`2019`=colDef(maxWidth =70, align ="center"),`2020`=colDef(maxWidth =70, align ="center"),`2021`=colDef(maxWidth =70, align ="center",style =list(fontWeight ="bold", backgroundColor ="#f0f0f0") # Destacamos el último año ) ),# Títulos y FuenteselementId ="tabla-desnutricion") %>%# Título externo a la tabla (HTML) htmlwidgets::prependContent(h3("Desnutrición en poblaciones amazónicas del Perú 2019-2021", style ="font-family: Arial; font-weight: bold; margin-bottom: 5px;") )
Desnutrición en poblaciones amazónicas del Perú 2019-2021
En todo el periodo analizado son estas las regiones con mayores registros de casos de desnutrición: Ancash, Ayacucho, Puno y Huancavelica, con más del 90% del total de casos de las poblaciones andinas.
Desnutrición en población afroperuana por departamentos 2019-2021
La categoría más frecuente de desnutrición de la población afroperuana es Retardo del desarrollo debido a desnutrición proteicocalórica, el 2019 con 50 casos; el 2020, con 48 casos y el 2021 con 69 casos. Los casos registrados en hombres son ligeramente superiores al de las mujeres en el 2020 y 2021.
El 2019 aparecen más registros de casos en niños de 6 a 11 años con 37 casos. El 2020 y 2021, se observa más casos en niños de 1 a 5 años con 38 y 98 casos, respectivamente.
Code
#| echo: false#| warning: false#| message: falselibrary(tidyverse)library(reactable)library(htmltools)# 1. DATOS TRANSCRITOS (Imagen: Curso de vida Afroperuana)data_curso_afro <-tribble(~Categoria, ~Edad, ~`2019`, ~`2020`, ~`2021`,# Severa"Desnutrición proteicocalórica severa, no especificada", "01-11m", 0, 1, 0,"Desnutrición proteicocalórica severa, no especificada", "01-05a", 1, 1, 2,"Desnutrición proteicocalórica severa, no especificada", "06-11a", 1, 0, 0,"Desnutrición proteicocalórica severa, no especificada", "60a >", 1, 0, 1,# Moderada y Leve"Desnutrición proteicocalórica de grado moderado y leve", "01-11m", 2, 12, 3,"Desnutrición proteicocalórica de grado moderado y leve", "01-05a", 5, 7, 36,"Desnutrición proteicocalórica de grado moderado y leve", "06-11a", 3, 0, 0,"Desnutrición proteicocalórica de grado moderado y leve", "12-17a", 0, 0, 3,"Desnutrición proteicocalórica de grado moderado y leve", "60a >", 2, 0, 1,# Retardo del desarrollo"Retardo del desarrollo debido a desnutrición proteicocalórica", "01-11m", 5, 16, 6,"Retardo del desarrollo debido a desnutrición proteicocalórica", "01-05a", 31, 29, 60,"Retardo del desarrollo debido a desnutrición proteicocalórica", "06-11a", 2, 0, 0,"Retardo del desarrollo debido a desnutrición proteicocalórica", "12-17a", 12, 3, 3,# No especificada"Desnutrición proteicocalórica, no especificada", "01-05a", 0, 1, 0,"Desnutrición proteicocalórica, no especificada", "06-11a", 0, 1, 0,"Desnutrición proteicocalórica, no especificada", "18-29a", 0, 1, 0,"Desnutrición proteicocalórica, no especificada", "30-59a", 1, 1, 0,"Desnutrición proteicocalórica, no especificada", "60a >", 5, 1, 2,# Total"Total Desnutrición", "01-11m", 0, 29, 9,"Total Desnutrición", "01-05a", 7, 38, 98,"Total Desnutrición", "06-11a", 37, 1, 0,"Total Desnutrición", "12-17a", 6, 3, 6,"Total Desnutrición", "18-29a", 12, 1, 0,"Total Desnutrición", "30-59a", 1, 1, 0,"Total Desnutrición", "60a >", 8, 1, 4)# 2. COLORES ESPECÍFICOS DE ESTA IMAGENc_2019_afro <-"#ffeb3b"# Amarillo brillantec_2020_afro <-"#ffb74d"# Naranjac_2021_afro <-"#61dcb6"# Verde Turquesa# 3. FUNCIÓN DE BARRASbar_chart <-function(label, width_percent, color) {# Si el valor es 0, mostramos el número pero sin barra o barra mínima width_style <-if(label ==0) "0px"else width_percent bar <-div(style =list(background = color, width = width_style, height ="14px", display ="inline-block",marginRight ="8px" ) )div(style =list(display ="flex", alignItems ="center"), bar,span(style =list(fontSize ="13px", color ="#333"), label) )}# 4. TABLA REACTABLEreactable( data_curso_afro,groupBy ="Categoria", pagination =FALSE, defaultExpanded =TRUE, theme =reactableTheme(headerStyle =list(borderBottom ="2px solid #333",textTransform ="uppercase",fontSize ="12px",color ="#555",textAlign ="left" ),rowStyle =list(borderBottom ="1px solid #eee",fontSize ="13px" ),groupHeaderStyle =list(backgroundColor ="#f9f9f9",fontWeight ="bold",fontSize ="14px" ) ),columns =list(Categoria =colDef(minWidth =200),Edad =colDef(minWidth =80,align ="right",style =list(fontWeight ="bold", color ="#555", borderRight ="1px solid #eee") ),`2019`=colDef(name ="2019",align ="left",cell =function(value) { max_val <-max(data_curso_afro$`2019`, na.rm =TRUE) width <-paste0((value / max_val) *100, "%")bar_chart(value, width, c_2019_afro) },minWidth =150 ),`2020`=colDef(name ="2020",align ="left",cell =function(value) { max_val <-max(data_curso_afro$`2020`, na.rm =TRUE) width <-paste0((value / max_val) *100, "%")bar_chart(value, width, c_2020_afro) },minWidth =150 ),`2021`=colDef(name ="2021",align ="left",cell =function(value) { max_val <-max(data_curso_afro$`2021`, na.rm =TRUE) width <-paste0((value / max_val) *100, "%")bar_chart(value, width, c_2021_afro) },minWidth =150 ) )) %>% htmlwidgets::prependContent(div(h3("Desnutrición por curso de vida en población afroperuana 2019-2021", style ="font-family: Arial; font-weight: bold; margin-bottom: 5px;"),div(style ="margin-bottom: 15px; font-family: Arial; font-size: 12px;",span(style =paste0("background: ", c_2019_afro, "; width: 10px; height: 10px; display: inline-block; margin-right: 5px;")), "2019",span(style =paste0("margin-left: 10px; background: ", c_2020_afro, "; width: 10px; height: 10px; display: inline-block; margin-right: 5px;")), "2020",span(style =paste0("margin-left: 10px; background: ", c_2021_afro, "; width: 10px; height: 10px; display: inline-block; margin-right: 5px;")), "2021" ) ) )
Desnutrición por curso de vida en población afroperuana 2019-2021
#| echo: false#| warning: false#| message: falselibrary(tidyverse)library(reactable)library(htmltools)library(sparkline)# 2. PROCESAMIENTO# Añadimos una columna con la lista de valores para generar el 'Sparkline' (minigráfico)data_tabla <- data_nutricion_afrodescendiente %>%rowwise() %>%mutate(Tendencia =list(c(`2019`, `2020`, `2021`))) %>%ungroup()# 3. CREACIÓN DE LA TABLA REACTABLEreactable( data_tabla,pagination =TRUE,searchable =TRUE,showPageSizeOptions =TRUE,striped =TRUE,highlight =TRUE,defaultPageSize =10,# Estilo generaltheme =reactableTheme(headerStyle =list(backgroundColor ="#66CDAA", # Color verde del encabezado originalfontWeight ="bold",color ="#222" ),borderColor ="#fff" ),columns =list(# Columna Etnias: Negrita y fondo suaveDepartamento =colDef(style =list(fontWeight ="bold", backgroundColor ="#BEF7D6"),minWidth =130 ),# Columna Categorías: Ancho suficiente para texto largo Categorías =colDef(minWidth =250,style =list(backrunColor="#98F5D0", fontSize ="0.9em", color ="#333") ),# Columna TENDENCIA (Sparkline)# Esta es la columna mágica que replica la línea azul del DatawrapperTendencia =colDef(name ="2019-2021",cell =function(value, index) {sparkline(data_tabla$Tendencia[[index]], type ="bar", # Tipo BARRA (como en tu imagen)barColor ="#00C200", # Color de barra amarillo intensochartRangeMin =0,width =80, height =20) },style =list(backgroundColor ="#98F5D0"), # Fondo crema para continuidadalign ="center",minWidth =150 ),# Columnas de Años (Formateo simple)`2019`=colDef(maxWidth =70, align ="center"),`2020`=colDef(maxWidth =70, align ="center"),`2021`=colDef(maxWidth =70, align ="center",style =list(fontWeight ="bold", backgroundColor ="#f0f0f0") # Destacamos el último año ) ),# Títulos y FuenteselementId ="tabla-desnutricion") %>%# Título externo a la tabla (HTML) htmlwidgets::prependContent(h3("Desnutrición en poblacion afrodescendiente del Perú 2019-2021", style ="font-family: Arial; font-weight: bold; margin-bottom: 5px;") )
Desnutrición en poblacion afrodescendiente del Perú 2019-2021
El 2019, las regiones con más registro de casos son Apurímac y Cajamarca, en tanto que el 2020 y el 2021 es Piura.